﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Reflection;

namespace INSTA.Concepts.Attributes
{
    class Program
    {
        static void Main(string[] args)
        {
            // On récupère une référence vers l'assembly
            // dans lequel nous sommes.
            Assembly assembly = typeof(Person).Assembly;

            // On boucle sur toutes les classes définies 
            // dans l'assembly..
            foreach (Type type in assembly.GetTypes())
            {
                // Si le type en cours est bien décoré avec 
                // un "TableAttribute"..
                if (type.IsDecoratedWith<TableAttribute>())
                {
                    // On récupère une variable typée de type TableAttribute..
                    TableAttribute attribute = type.GetUniqueAttribute<TableAttribute>();

                    string tableName = attribute.TableName;

                    Console.WriteLine("{0} --> {1}", type.Name, tableName);
                }

            }
        }
    }
}
